package com.pactera.base.commons.exception;

/**
 * <p>
 * 表示服务返回的错误消息。
 * </p>
 *
 * <p>
 * {@link ServiceException}用于处理服务返回的错误消息。比如，没有权限进行某项操作
 * </p>
 *
 * <p>
 * 通常来讲，调用者只需要处理{@link ServiceException}。因为该异常表明请求被服务处理，但处理的结果表明
 * 存在错误。异常中包含了细节的信息，特别是错误代码，可以帮助调用者进行处理。
 * </p>
 * @author wangrui
 * 自定义异常
 */
public class ServiceException extends RuntimeException {

    private String errorMessage;
    private String errorCode;

    /**
     * 构造新实例。
     */
    public ServiceException() {
        super();
    }

    /**
     * 用给定的异常信息构造新实例。
     *
     * @param errorMessage 异常信息。
     */
    public ServiceException(String errorMessage) {
        super((String) null);
        this.errorMessage = errorMessage;
    }

    /**
     * 用表示异常原因的对象构造新实例。
     *
     * @param cause 异常原因。
     */
    public ServiceException(Throwable cause) {
        super(null, cause);
    }

    /**
     * 用异常消息和表示异常原因的对象构造新实例。
     *
     * @param errorMessage 异常信息。
     * @param cause        异常原因。
     */
    public ServiceException(String errorMessage, Throwable cause) {
        super(null, cause);
        this.errorMessage = errorMessage;
    }

    /**
     * 用异常消息和表示异常原因及其他信息的对象构造新实例。
     *
     * @param errorMessage 异常信息。
     * @param errorCode    错误代码。
     */
    public ServiceException(String errorMessage, String errorCode) {
        this(errorMessage, errorCode, null);
    }


    /**
     * 用异常消息和表示异常原因及其他信息的对象构造新实例。
     *
     * @param errorMessage 异常信息。
     * @param errorCode    错误代码。
     * @param cause        异常原因。
     */
    public ServiceException(String errorMessage, String errorCode, Throwable cause) {
        this(errorMessage, cause);
        this.errorCode = errorCode;
    }

    /**
     * 返回异常信息。
     *
     * @return 异常信息。
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * 返回错误代码的字符串表示。
     *
     * @return 错误代码的字符串表示。
     */
    public String getErrorCode() {
        return errorCode;
    }


}